package cn.com.cpic.insurance.rulecheck.core;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * <pre>
 * 这是一个精简的可修改Map实现，在这个Map中实际存储的是元素的token，而不是元素本身。
 * 这样做的目的是减少Map持久化的大小，同时为了避免添加未知的元素。
 * 添加的所有的元素都必须在另一个参照集合内，所谓未知元素，就是指不在参照集合内的元素。
 * 插入未知元素会返回false。
 * </pre>
 * 
 * @author 代波
 * @since 2011-8-23
 * @param <K> Map中key的类型
 * @param <V> Map中value的类型
 */
public final class ReferModifiableMap<K, V extends Tokenable<K>> extends ReferModifiableSet<K, V> implements
		ModifiableMap<K, V> {
	private static final long serialVersionUID = -4810752297635683669L;

	public ReferModifiableMap(ModifiableMap<K, V> referMap) {
		super(referMap);
	}

	public ReferModifiableMap(ModifiableMap<K, V> referMap, Set<V> set) {
		super(referMap, set);
	}

	public boolean containsKey(K key) {
		return tokenSet.contains(key);
	}

	public Iterator<K> keyIterator() {
		return new HashSet<K>(tokenSet).iterator();
	}

	public V get(K key) {
		return tokenSet.contains(key) ? referMap.get(key) : null;
	}
}
